package com.neardrug.task;

import com.neardrug.common.Constants;
import com.neardrug.common.OnlineUserManager;
import com.neardrug.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.scheduling.annotation.Scheduled;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
import java.util.Set;
import java.util.stream.Stream;


@Component
@Slf4j
public class FileDealTask {

    //测试
    //@Scheduled(cron = "0/5 * * * * ?")
    //正式
    //@Scheduled(cron = "0 0 0/6 * * ?")
    public void fileCleanTask(){
        //获取到当前所有在线的用户的id
        Set<Integer> onlineUserIds = OnlineUserManager.getOnlineUsers();

        // 获取项目根目录的路径
        String projectDir = System.getProperty("user.dir");
        // 构建 files 文件夹的完整路径
        Path filesPath = Paths.get(projectDir, "files");
        // 遍历并打印 files 文件夹中的所有文件和文件夹，排除顶层文件夹本身
        try (Stream<Path> paths = Files.walk(filesPath)) {
            paths.filter(path -> !path.equals(filesPath)) // 排除顶层的 files 目录本身
                    .forEach(file -> {
                        //System.out.println(file.getFileName());
                        String fileName= String.valueOf(file.getFileName());
                        String[] fileParts = fileName.split("-");
                        String filePart=fileParts[1];
                        //System.out.println("文件名中的userId:" + userId);
                        //得到该文件的user的id(Integer类型)
                        Integer userId=Integer.valueOf(filePart);
                        if (!OnlineUserManager.isUserOnline(userId)){//如果用户不在线 删除这个文件
                            try {
                                Files.delete(file);
                                System.out.println("已删除文件:" + fileName);
                            } catch (IOException e) {
                                throw new ServiceException(Constants.FILE_ERROR,"文件错误");
                            }
                        }
                    });
        } catch (IOException e) {
            throw new ServiceException(Constants.FILE_ERROR,"文件错误");
        }
    }
}
